const axios = require('axios');
const fs = require('fs');
const path = require('path');

// 获取配置文件路径（兼容打包环境和开发环境）
let configPath;
try {
  // 尝试使用相对于执行文件的路径（打包后环境）
  configPath = path.join(path.dirname(process.execPath), 'config.json');
  
  // 检查文件是否存在
  if (!fs.existsSync(configPath)) {
    // 如果不存在，尝试项目根目录（开发环境）
    configPath = path.join(process.cwd(), 'config.json');
    
    // 如果项目根目录也不存在，尝试src的上一级目录
    if (!fs.existsSync(configPath)) {
      configPath = path.join(__dirname, '../config.json');
    }
  }
} catch (error) {
  // 如果出错，尝试项目根目录
  configPath = path.join(process.cwd(), 'config.json');
}

// 加载配置文件
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));

/**
 * 调用翻译接口翻译文本
 * @param {string} text - 需要翻译的文本
 * @returns {Promise<string|null>} - 翻译后的文本，失败时返回 null
 */
async function translateText(text) {
  const url = config.url;
  const token = config.token;
  const model = config.model;
  const max_tokens = config.max_tokens;

  // 判断是否为中文，如果是中文则无需翻译
  const isChinese = /[\u4e00-\u9fa5]/.test(text);
  if (isChinese) {
    return text;
  }

  const data = {
    model: model,
    messages: [
      {
        content: "将以下JSON格式的文本从英文翻译为中文、保持原有的JSON结构和字段名称不变、确保翻译全部字段中的内容、确保翻译准确且符合中文表达习惯、请特别注意不要换行、不要修改JSON格式",
        role: "system"
      },
      {
        content: text,
        role: "user"
      }
    ],
    stream: false,
    max_tokens: max_tokens,
    temperature: 0.7,
    top_p: 0.7,
    top_k: 50,
    frequency_penalty: 0.5,
    n: 1,
    response_format: {
      type: "text"
    }
  };

  const requestConfig = {
    headers: {
      'Authorization': `Bearer ${token}`,
      'Content-Type': 'application/json'
    },
    timeout: 60000 // 设置60秒超时，防止请求挂起
  };

  try {
    const response = await axios.post(url, data, requestConfig);
    if (response.data && response.data.choices && response.data.choices[0] && response.data.choices[0].message) {
      return response.data.choices[0].message.content;
    } else {
      console.error('翻译API返回格式异常:', JSON.stringify(response.data));
      return null;
    }
  } catch (error) {
    if (error.response) {
      console.error('翻译API错误:', error.response.status, error.response.data);
    } else if (error.request) {
      console.error('翻译请求超时或网络错误');
    } else {
      console.error('翻译失败:', error.message);
    }
    
    // 添加重试逻辑
    console.log('3秒后重试翻译...');
    return new Promise((resolve) => {
      setTimeout(async () => {
        try {
          const retryResponse = await axios.post(url, data, requestConfig);
          if (retryResponse.data && retryResponse.data.choices && retryResponse.data.choices[0] && retryResponse.data.choices[0].message) {
            resolve(retryResponse.data.choices[0].message.content);
          } else {
            console.error('翻译重试失败: API返回格式异常');
            resolve(null);
          }
        } catch (retryError) {
          console.error('翻译重试失败:', retryError.message);
          resolve(null);
        }
      }, 3000);
    });
  }
}

module.exports = translateText;